import { createRouter, createWebHistory } from "vue-router";
import routes from "@/router/routes";
import actionToken from "@/tools/actionToken";
import useUserStore from "@/store/user";
import reminder from "@/utils/reminder";
import nProgerss from "nprogress";

const router = createRouter({
    // 配置history路由模式
    history: createWebHistory(),
    // 路由表
    routes,
    // 滚动位置
    scrollBehavior(to, from, savePosition) {
        if (savePosition) {
            return savePosition;
        }
        return { top: 0, left: 0 };
    }
});

// 这是在配置不需要权限的路由！可任意访问的路由。
const whitelist: string[] = ["/", "/login", "/rank", "/404", "/listen-list", "/category/list", "/search", "/album/"];
// 详情是需要权限的！

// 全局路由守卫会在路由跳转之前执行 ：to表示到哪个路由去。from表示从哪个路由来
router.beforeEach(async (to, from, next) => {
    nProgerss.start();
    let token = actionToken.getToken();
    // 判断当次路由的跳转时是否存在token
    if (token) {
        const userStore = useUserStore();
        const id = userStore.state.id;
        // 进一步判定是否存在用户信息
        if (id) {
            next();
        } else {
            try {
                await userStore.getUserDetailInfo();//获取用户信息
                next();
            } catch (error) {
                actionToken.removeToken();
                next({ path: "/login" })
            }
        }
    } else {// 说明此时没有token，判断是否是在访问路由白名单中的路由
        // 说明是在访问白名单中的路由,允许进入
        if (whitelist.includes(to.path) || to.path.includes("/album/")) {
            next();
        } else {//说明此时在访问权限路由
            reminder("请您先登录");
            next({ path: "/login" });
        }
    }
});
router.afterEach(() => {
    nProgerss.done();
})
export default router;